/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ve.terminal.modelo;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import ve.terminal.controlador.Sesion;
import ve.terminal.db.MediadorBD;
import ve.terminal.db.TraductorSentencias;
import ve.terminal.excepciones.BaseDeDatosExcepcion;
import ve.terminal.excepciones.ConexionExcepcion;

/**
 *
 * @author Jesus Graterol
 */
public class MDestino {
    
    private long codDestino;
    private String nombre;
    
    /**
     * Configuracion de la base de datos
     * 1.- Nombre de la tabla
     * 2.- Nombres de las columnas
     * 3.- Tipos de datos de las columnas
     * 
     * NOTA: se asume que los campos estan en el mismo orden de la base de datos
     * y que la clave primaria está al principio
     */
    private static String nombreEntidad="destinos";
    private static String[] campos = {"Cod_Destino","Destino"};
    private static int[] tipos = {Sesion.TIPO_DATO_LONG,Sesion.TIPO_DATO_STRING};

    /**
     * Constructor de la clase
     * @param codDestino
     * @param nombre 
     */
    public MDestino(long codDestino, String nombre) {
        this.codDestino = codDestino;
        this.nombre = nombre;
    }
    
    /**
     * A partir del código busca en la base de datos el tipo servicio
     * @param codTipoServicio
     * @param nombre 
     */
    public MDestino(long codDestino) throws ConexionExcepcion, BaseDeDatosExcepcion {
        HashMap campos = new HashMap();
        campos.put(MDestino.campos[0], codDestino);
        String consulta = TraductorSentencias.getSelect(new Vector(), nombreEntidad, campos);
        ResultSet rs = null;
        
        try{
            rs = MediadorBD.realizarConsulta(consulta);
            Vector traduccion = TraductorSentencias.traducirResultado(rs, MDestino.tipos);
            for(int i=0;i<traduccion.size();i++){
                this.codDestino = ((Long)traduccion.elementAt(0)).longValue();
                this.nombre = (String)traduccion.elementAt(1);
            }
            
        } catch(ConexionExcepcion e){
            throw e;
        } catch (BaseDeDatosExcepcion e){
            throw e;
        } finally {
            try {
                rs.close();
            } catch (SQLException ex) {
                Logger.getLogger(MDestino.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    public long getCodDestino() {
        return codDestino;
    }

    public String getNombre() {
        return nombre;
    }

    public void setCodDestino(long codDestino) {
        this.codDestino = codDestino;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
    
    public static String[] getCampos() {
        return campos;
    }

    public static String getNombreEntidad() {
        return nombreEntidad;
    }

    public static int[] getTipos() {
        return tipos;
    }

    public static void setCampos(String[] campos) {
        MDestino.campos = campos;
    }

    public static void setNombreEntidad(String nombreEntidad) {
        MDestino.nombreEntidad = nombreEntidad;
    }

    public static void setTipos(int[] tipos) {
        MDestino.tipos = tipos;
    }
    
    /**
     * Actualiza el registro en la base de datos
     * @return int numero de filas insertadas
     */
    public int update() throws ConexionExcepcion, BaseDeDatosExcepcion{
        HashMap campos = new HashMap();
        campos.put(MDestino.campos[0], new Long(this.codDestino));
        HashMap set = new HashMap();
        set.put(MDestino.campos[1], this.nombre);
        String sentencia = TraductorSentencias.getUpdate(MDestino.nombreEntidad, set,campos);
        return MediadorBD.realizarSentencia(sentencia);
    }
    
    /**
     * Elimina el registro de la base de datos
     * @return Número de filas eliminadas
     */
    public int delete() throws ConexionExcepcion, BaseDeDatosExcepcion{
        HashMap campos = new HashMap();
        campos.put(MDestino.campos[0], new Long(this.codDestino));
        String sentencia = TraductorSentencias.getDelete(MDestino.nombreEntidad, campos);
        return MediadorBD.realizarSentencia(sentencia);
    }
    
    /**
     * Crea un nuevo registro en base de datos
     * @return true: si se actualizó correctamente, false si ocurrió algun error
     */
    public boolean save() throws ConexionExcepcion, BaseDeDatosExcepcion{
        boolean retorno=false;
        HashMap campos = new HashMap();
        campos.put(MDestino.campos[0], new Long(this.codDestino));
        campos.put(MDestino.campos[1], this.nombre);
        String sentencia = TraductorSentencias.getInsert(MDestino.nombreEntidad, campos);
        MediadorBD.realizarSentencia(sentencia);
        retorno=true;
        return retorno;
    }
}
